﻿using System;
using System.Data;
using System.Windows.Forms;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Util;

namespace SiGeCoPre.Presupuesto_ViewAlta
{
    /// <summary>
    /// Formulario de alta de empleados
    /// </summary>
    public partial class frmAltaEmpleado : Form
    {
        BLEmpleados createEmpleado = BLFactoryPresupuesto.createEmpleado();
        BLSectores createSector = BLFactoryPresupuesto.createSector();

        public frmAltaEmpleado()
        {
            InitializeComponent();
        }

        private void frmAltaEmpleado_Load(object sender, EventArgs e)
        {
            try
            {
                DataTable sectores = createSector.getAllSector();
                if (null != sectores)
                {
                    foreach (DataRow dr in sectores.Rows)
                    {
                        cmbSector.Items.Add(dr["Nombre"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
        }

        private void btnAlta_Click(object sender, EventArgs e)
        {
            try
            {
                if (verificar())
            {
                String sectorNombre = createSector.getSector(cmbSector.Text).Nombre;
                empleadosDTO empleado = new empleadosDTO();
                empleado.Nombre = txtNombre.Text.Trim();
                empleado.Apellido = txtApellido.Text.Trim();
                empleado.Usuario = txtUsuario.Text.Trim();
                empleado.Password = txtPassword.Text.Trim();
                empleado.Mail = txtMail.Text.Trim();
                empleado.Sector = sectorNombre;
                empleado.Activo = true;

                Boolean insertado = createEmpleado.saveEmpleado(empleado);
                if (insertado)
                {
                    MessageBox.Show("Empleado dado de Alta!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                    this.Dispose();
                }
                else
                {
                    MessageBox.Show("Error al intentar dar de Alta al Empleado!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Texto.escribirLog("Error en altaEmpleado");
                }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

        private bool verificar()
        {
            bool verificado = false;
            bool nombreCorrecto = false;
            bool apeCorrecto = false;
            bool secCorrecto = false;
            bool usuCorrecto = false;
            bool mailCorrecto = false;
            bool passCorrecta = false;

            if (!Validador.es_nombre(txtNombre))
            {
                errorProvider1.SetError(txtNombre, "Sólo letras, ‘´’, ‘.’ y ‘-’ o vacio");
            }
            else
            {
                errorProvider1.SetError(txtNombre, String.Empty);
                nombreCorrecto = true;
            }

            if (!Validador.es_nombre(txtApellido))
            {
                errorProvider1.SetError(txtApellido, "Sólo letras, ‘´’, ‘.’ y ‘-’ o vacio");
            }
            else
            {
                errorProvider1.SetError(txtApellido, String.Empty);
                apeCorrecto = true;
            }

            if (!Validador.es_nombre(cmbSector))
            {
                errorProvider1.SetError(cmbSector, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(cmbSector, String.Empty);
                secCorrecto = true;
            }

            if (!Validador.es_cadena(txtUsuario))
            {
                errorProvider1.SetError(txtUsuario, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(txtUsuario, String.Empty);
                usuCorrecto = true;
            }

            if (!Validador.es_email(txtMail))
            {
                errorProvider1.SetError(txtMail, "Ejemplo ejemplo@ejemplo.ejemplo");
            }
            else
            {
                errorProvider1.SetError(txtMail, String.Empty);
                mailCorrecto = true;
            }

            if (!Validador.es_password(txtPassword))
            {
                errorProvider1.SetError(txtPassword, "Entre 8 y 10 caracteres, por lo menos un digito y un"
                + "y un alfanumérico, y no puede contener caracteres especiales");
            }
            else
            {
                if (!txtPassword.Text.Equals(txtRePass.Text))
                {
                    errorProvider1.SetError(txtRePass, "Las contraseñas deben ser iguales");
                }
                else
                {
                    errorProvider1.SetError(txtPassword, String.Empty);
                    errorProvider1.SetError(txtRePass, String.Empty);
                    passCorrecta = true;
                }
                
            }

            if (nombreCorrecto && apeCorrecto && usuCorrecto
                && mailCorrecto && passCorrecta && secCorrecto)
            {
                verificado = true;
            }

            return verificado;
        }
    }
}
